Android – Handle消息传递机制
前言
Android为了线程安全,并不会允许我们在UI线程外操作UI,很多时候我们做界面刷新都需要通过Handle来通知UI更新。当我们的子线程想修改Activity中的UI组件,我们可以新建一个Handle对象,通过这个对象向主线程发送消息。而我们发送的消息会先到主线程的MessageQueue进行等待,由Looper按先入先出的顺序取出,再根据Message对象的what属性进行分发给对应的Handle进行处理。
Handle怎么用?
- post(Runnable)
|
|
- postDelayed(Runnable,long)
这里我们可以写一个类继承至Runnable,重写run方法,在里面处理UI更新,然后在主线程调用。
- sendMessage()
子线程sendMessage()传入一个Message对象,可以是int型,也可以为一个object对象,然后在主线程handleMessage(Message msg)里取出信息更新UI。
- sendMessageDelayed()
和上面大同小异。
Demo:https://github.com/Omooo/HandleDemo
四个按钮点击事件对应Handle的四种方法,也很简单清晰。
参考:
Android中的Handler, Looper, MessageQueue和Thread
最后
因为是看慕课网的课程来了解的Handle,学的并不深入。关于Looper还有MessageQueue的道理都懂,但是实际上我还没用到,我太菜了,深入之后再更新,留个坑吧。